# __init__.py 为初始入口文件,工程代码的入口文件.
# ==============================================
# 导入层
# ==============================================

from .main import *                         # 导入主程序

from ascript.android.ui import WebWindow   # 导入WebWindow模块
from ascript.android.system import R       # 导入资源路径工具   
import json                                # 导入json模块
import os                                  # 导入操作系统模块

# ==============================================
# 封装层
# ==============================================


# 配置文件路径
CONFIG_FILE = R.sd("user_config.json")

# 定义全局变量，用于保存从UI接收的参数
workflow_id = None                      # 客服工作流
app_token = None                        # 飞书应用Token
access_token = None                     # 访问令牌
Scheme_Name = None                      # 方案名称
number = None                           # 编号


# 保存配置到文件
def save_config_to_file(config_data):   
    try:
        with open(CONFIG_FILE, "w") as file:  # 打开配置文件
            file.write(config_data)           # 写入配置数据    
        print("配置已保存到文件")
        return True                           # 返回True表示保存成功
    except Exception as e:
        print(f"保存配置时出错: {e}")
        return False                          # 返回False表示保存失败


# 从文件加载配置
def load_config_from_file():
    try:
        if os.path.exists(CONFIG_FILE):             # 检查配置文件是否存在
            with open(CONFIG_FILE, "r") as file:    # 打开配置文件
                return file.read()                  # 读取配置数据
        else:
            print("配置文件不存在")
            return None                             # 返回None表示配置文件不存在
    except Exception as e:
        print(f"读取配置时出错: {e}")
        return None                                 # 返回None表示读取失败


# 设置和html交互的消息通道
def tunner(k, v):
    if k == "Web_page_status":
        print("网页加载完成")
        w.call('General_parameters("欢迎使用AI客服")')    # 调用前端的路径回调函数，传递实际保存路径

        # 加载用户配置并发送到前端
        config_data = load_config_from_file()
        if config_data:
            w.call(f'load_config_callback({json.dumps(config_data)})')  # 调用前端的路径回调函数，传递实际保存路径

    elif k == "data":
        # 声明使用全局变量
        global workflow_id, app_token, access_token, Scheme_Name, number   

        # 解析从UI接收的JSON数据
        res = json.loads(v)

        # 将UI数据赋值给全局变量
        access_token = res["access_token"]
        workflow_id = res["workflow_id"]
        app_token = res["app_token"]
        Scheme_Name = res["Scheme_Name"]
        number = res["number"]                    

        # 可以在这里添加参数验证
        if all([access_token, workflow_id, app_token, Scheme_Name, number]):  
            w.call('General_parameters("参数设置成功，可以开始执行")')

            print("access_token:"+access_token)
            print("workflow_id:"+workflow_id)
            print("app_token:"+app_token)
            print("Scheme_Name:"+Scheme_Name)
            print("number:"+number)               

            # 启动执行主程序，添加number参数
            main(access_token, workflow_id, app_token, Scheme_Name, number)

        else:
            w.call('General_parameters("参数不完整，请检查所有字段")')

    elif k == "save_config":
        print("保存配置:", v)
        if save_config_to_file(v):
            # 获取实际保存路径
            full_path = CONFIG_FILE

            # 发送保存成功消息
            w.call('General_parameters("配置已保存成功")')

            # 调用前端的路径回调函数，传递实际保存路径
            w.call(f'save_path_callback("{full_path}")')
        else:
            w.call('General_parameters("配置保存失败")')

    elif k == "clear_form":
        print("表单已清空")
        w.call('General_parameters("表单已清空")')


# ==============================================
# 执行层
# ==============================================

#调用html文件
w = WebWindow(R.ui('b.html'), tunner)

w.width(-1)
w.height(-1)

# 显示窗口
w.show()

# ==============================================
# 测试层
# ==============================================
# access_token = "pat_RCzUP9zVHVIY3lmsYGzDwlvEBAbc2grWa4AjZtnHg7pHetKMMnTX3mvbF4nOneDl"
# workflow_id = "7503931766982901794"
# app_token = "https://r6zjniadzx.feishu.cn/base/BZdKbYdj1aj7pSsjusrcXgzynCj?table=tbl75JUfPBBtIRuH&view=vewHIBA329"
# Scheme_Name = "方案1"
# number="测试"
# # 执行主程序
# main(access_token,workflow_id,app_token,Scheme_Name,number)